/*
 * Copyright 2007 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * 
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package org.gwtrpc4j.stream;

/**
 * A vector of primitive characters.
 */
class CharVector {
	private int capacityIncrement;
	private char chars[];
	private int size;

	public CharVector(int initialCapacity, int capacityIncrement) {
		assert initialCapacity >= 0;
		assert capacityIncrement >= 0;

		this.capacityIncrement = capacityIncrement;
		chars = new char[initialCapacity];
	}

	public void add(char ch) {
		if (size >= chars.length) {
			int growBy = capacityIncrement == 0 ? chars.length * 2
					: capacityIncrement;
			char newChars[] = new char[(chars.length + growBy)];
			System.arraycopy(chars, 0, newChars, 0, size);
			chars = newChars;
		}

		chars[size++] = ch;
	}

	public char[] asArray() {
		return chars;
	}

	public char get(int index) {
		assert index < size;

		return chars[index];
	}

	public int getSize() {
		return size;
	}

	public void set(int index, char ch) {
		assert index >= 0 && index < size;

		chars[index] = ch;
		++size;
	}
}